﻿
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace DDD {

    /// <summary>
    /// Attribute変数
    /// </summary>
    /// <remarks>
    /// この構造体はエンジン側がシェーダーに渡すAttribute変数(頂点データ)をラップしたものです。
    /// 頂点データを保持する<see cref="VertexArray"/>とAttribute変数名の<dic>Name</dic>、
    /// それに補助的に使用する利用目的のセマンティクス<dic>Semantics</dic>からなります。
    /// <see cref="VertexArray"/>の登録は<see cref="VertexBuffer.AddVertexArray"/>で行います。
    /// 指定された頂点データ(<see cref="VertexArray"/>)がシェーダー側の同名のAttibute変数に送られます。
    /// ユーザーが<dic>AttributeVariable</dic>型をインスタンス化することはできず、
    /// エンジン側が作成したものを戻り値で受け取ります。
    /// <see cref="UniformVariable"/>と<see cref="ShaderDeclaration"/>も参考にしてください。
    /// </remarks>
    public struct AttributeVariable {

        /// <summary>
        /// コンストラクター
        /// </summary>
        /// <param name="name">Attribute変数名</param>
        /// <param name="varry">このAttribute変数に関連づけられている<see cref="VertexArray"/>オブジェクト</param>
        internal AttributeVariable (string name, VertexArray varry)
            : this () {
            this.Name = name;
            this.VertexArray = varry;
        }

        /// <summary>
        /// Attribute変数名
        /// </summary>
        /// <value>Attribute変数の名前です。シェーダー側で宣言された完全一致するAttribute変数に関連づけられます。</value>
        public string Name { get; private set; }

        /// <summary>
        /// 頂点データ(<see cref="VertexArray"/>)
        /// </summary>
        /// <value>指定のAttribute変数に渡される頂点データです。</value>
        public VertexArray VertexArray { get; private set; }

        /// <summary>
        /// <see cref="AttributeVariable"/>オブジェクトの情報を表示します
        /// </summary>
        /// <returns></returns>
        public override string ToString () {
            return string.Format ("AttfibuteVariable : Name={0}, VertexArray={1}", Name, VertexArray);
        }
    }
}
